// 对 屏幕宽高，小程序胶囊，等 与 系统 位置，大小相关的 东西放到这里使用
import {
	px_from_rpx,
	rpx_from_px,
	StorageSystemInfo,
} from "@/common/utils.js";

export default {
	namespaced: true,
	state: { //存放状态
		// uni.getSystemInfoSync() 获取到的数据
		sysDeviceInfo: null,
		// 微信小程序胶囊位置
		mpCapsuleInfo: null,
		

	},
	/*action 提交的是 mutation，通过 mutation 来改变 state ，而不是直接变更状态*/
	actions: {
		// 保存系统设备信息
		saveSysDeviceInfo(context, info) {
			context.commit("SAVESYSDEVICEINFO", info);
		},
		// 保存小程序胶囊信息
		saveMpCapsuleInfo(context, info) {
			context.commit("SAVEMPCAPSULEINFO", info);
		},
		// app启动 onLaunch方法调用一下，本地保存APP系统信息，小程序胶囊信息
		appOnLaunch(context) {
			if (!context.state.sysDeviceInfo) {
				context.commit("SAVESYSDEVICEINFO",StorageSystemInfo());
			}
			// #ifdef MP
			if (!context.state.mpCapsuleInfo) {
				let capsuleRect = uni.getMenuButtonBoundingClientRect();
				context.commit("SAVEMPCAPSULEINFO", capsuleRect);
			}
			// #endif
		},

	},
	/*改变数据的方法集合*/
	mutations: {
		SAVESYSDEVICEINFO(state, info) {
			state.sysDeviceInfo = info;
		},
		SAVEMPCAPSULEINFO(state, info) {
			state.mpCapsuleInfo = info;
		},
	},
	/*对 state 的加工，是派生出来的数据*/
	getters: {
		// 系统状态栏高度 rpx
		sysStatusBarHeight(state) {
			if (state.sysDeviceInfo) {
				return state.sysDeviceInfo.statusBarHeight
			}
			return 0
		},
		// 系统导航栏高45px，小程序根据胶囊位置和状态栏调整 高度
		sysNavgationBarHeight(state,getter){
			console.log(state.mpCapsuleInfo);
			// #ifdef MP
			if (state.mpCapsuleInfo) {
				return state.mpCapsuleInfo.height + (state.mpCapsuleInfo.top - getter.sysStatusBarHeight) * 2
			}else{
				return 45
			}
			// #endif
			return 45
		},
		
		// 自定义状态栏高度px
		customStatusBarHeight(state,getters){
			// #ifdef MP
			if (!state.mpCapsuleInfo) {
				return getters.sysStatusBarHeight;
			}
			let capsule_center = state.mpCapsuleInfo.top + state.mpCapsuleInfo.height / 2.0;
			return capsule_center - getters.customNavgationBarHeight / 2.0 ;
			// #endif
			
			return getters.sysStatusBarHeight;
		},
		// 常规自定义默认的导航栏高度45px
		customNavgationBarHeight(state) {
			return 45;
		},
		// 常规自定义状态栏+自定义导航栏的高度px,适配了小程序胶囊
		customStatusNavgationHeight(state, getters) {
			return getters.customStatusBarHeight + getters.customNavgationBarHeight
		},
		
		// 小程序胶囊左边距离屏幕右边的间距 rpx
		mpCapsuleLeftSpace_rpx(state) {
			if (state.sysDeviceInfo && state.mpCapsuleInfo) {
				let leftSpace = state.sysDeviceInfo.screenWidth - state.mpCapsuleInfo.left;
				return rpx_from_px(leftSpace);
			}
			return 0
		},
	},

}